package com.itbaizhan.mapper;

import com.itbaizhan.pojo.Student;
import org.apache.ibatis.annotations.One;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.mapping.FetchType;

import java.util.List;

public interface StudentMapper {
    /*一对一关联查询  学生表与班级表
     * 一个学生对应一个班级*/
    //查询出学生所在的班级
    @Select("select * from student")
    /*自定义映射关系  */
    @Results(id="studentMapper",value = {
            @Result(id = true,property = "sid",column = "sid"),
            @Result(property = "name",column = "name"),
            @Result(property = "age",column = "age"),
            @Result(property = "sex",column = "sex"),
            /*对象的自定义 也是用Result()
            * property:属性名（在主表中对象的名）
            * column: 调用方法时传入的参数列（关联的列）
            * one: 一对一  表示该属性是一个对象
            * select: 调用从表的方法
            * fetchType: 加载方式 （一对一都是立该加载）*/
            @Result(property = "classes",column = "classId",
                    one =@One(select = "com.itbaizhan.mapper2.ClassMapper2.findById",
                    fetchType = FetchType.EAGER))
    })
    List<Student> findAll();

    //一对多查询  sql语句中的classId 要与表中的名相同
    //根据班级id查询学生（从表）  这里对应的是student表的classid 不是class表的cid
    @Select("select * from student where classId = #{classId}")
    List<Student> findByClassId(int classId);
}
